<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/11/2 0002
 * Time: 17:05
 */

/**
 *  国际支付宝网站支付接口
 * @link https://global.alipay.com/service/website_split_cn/6
 */
class GlobalCreateForexTradeBuilder extends AlipayTradeBuilder
{
    public function __construct()
    {
      //  $this->params['product_code'] = 'NEW_OVERSEAS_SELLER';
        $this->params['currency'] = 'USD';
        $this->params['order_gmt_create'] = date('Y-m-d H:i:s');
        $this->params['order_valid_time'] = 48*3600;
    }

    /**
     * 服务器异步通知页面路径：支付宝服务器主动通知商户网站里指定的页面http路径。
     * @param $notify_url
     * @return $this
     */
    public function setNotifyUrl($notify_url)
    {
        $this->params['notify_url'] = $notify_url;
        return $this;
    }

    /**
     * 服务器异步通知页面路径：支付宝服务器主动通知商户网站里指定的页面http路径。
     * @return mixed
     */
    public function getNotifyUrl()
    {
        return $this->params['notify_url'];
    }

    /**
     * 页面跳转同步通知页面路径：支付宝处理完请求后，当前页面自动跳转到商户网站里指定页面的http路径。
     * @return mixed|null
     */
    public function getReturnUrl(){
        return isset($this->params['return_url']) ? $this->params['return_url'] : null;
    }

    /**
     * 页面跳转同步通知页面路径：支付宝处理完请求后，当前页面自动跳转到商户网站里指定页面的http路径。
     * @param string $return_url
     * @return $this
     */
    public function setReturnUrl($return_url){
        $this->params['return_url'] = $return_url;
        return $this;
    }

    /**
     * @return mixed|null 支付宝合作商户网站唯一订单号。
     */
    public function getOutTradeNo()
    {
        return isset($this->params['out_trade_no']) ? $this->params['out_trade_no'] : null;
    }

    /**
     * 支付宝合作商户网站唯一订单号。
     * @param string $out_trade_no
     * @return $this
     */
    public function setOutTradeNo($out_trade_no)
    {
        $this->params['out_trade_no'] = $out_trade_no;
        return $this;
    }

    /**
     * 商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字
     * @return mixed|null
     */
    public function getSubject()
    {
        return isset($this->params['subject']) ? $this->params['subject'] : null;
    }

    /**
     * 商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字
     * @param string $subject
     * @return $this
     */
    public function setSubject($subject)
    {
        $this->params['subject'] = $subject;
        return $this;
    }

    /**
     * 结算币种
     *
     *  编码      币种 位数
     *  AUD	    澳元	    2
     *  CAD	    加拿大元	2
     *  CHF	    瑞士法郎	2
     *  DKK	    丹麦克朗	2
     *  EUR	    欧元	    2
     *  GBP	    英镑	    2
     *  HKD	    港币	    2
     *  JPY	    日元	    0
     *  KRW	    韩元	    0
     *  NOK	    挪威克朗	2
     *  NZD	    新西兰元	2
     *  SEK	    瑞典克朗	2
     *  SGD	    新币	    2
     *  THB	    泰铢	    2
     *  USD	    美元	    2
     * @param string $currency
     * @return $this
     */
    public function setCurrency($currency)
    {
        $this->params['currency'] = $currency;
        return $this;
    }

    /**
     * 结算币种
     * @return string
     */
    public function getCurrency()
    {
        return isset($this->params['currency']) ? $this->params['currency'] : null;
    }

    /**
     * 商品的外币金额，范围是0.01～1000000.00.
     * @param string $total_fee
     * @return $this
     */
    public function setTotalFee($total_fee)
    {
        $this->params['total_fee'] = $total_fee;
        return $this;
    }

    /**
     * 商品的外币金额，范围是0.01～1000000.00.
     * @return string
     */
    public function getTotalFee()
    {
        return isset($this->params['total_fee']) ? $this->params['total_fee'] : null;
    }

    /**
     * 范围为0.01～1000000.00
     * 如果商户网站使用人民币进行标价就是用这个参数来替换total_fee参数，rmb_fee和total_fee不能同时使用
     * @param string $rmb_fee
     * @return $this
     */
    public function setRmbFee($rmb_fee)
    {
        $this->params['rmb_fee'] = $rmb_fee;
        return $this;
    }

    /**
     * 范围为0.01～1000000.00
     * 如果商户网站使用人民币进行标价就是用这个参数来替换total_fee参数，rmb_fee和total_fee不能同时使用
     * @return string
     */
    public function getRmbFee()
    {
        return isset($this->params['rmb_fee']) ? $this->params['rmb_fee'] : null;
    }

    /**
     * 对一笔交易的具体描述信息。如果是多种商品，请将商品描述字符串累加传给body。
     * @return mixed|null
     */
    public function getBody()
    {
        return isset($this->params['body']) ? $this->params['body'] : null;
    }

    /**
     * 对一笔交易的具体描述信息。如果是多种商品，请将商品描述字符串累加传给body。
     * @param string $body
     * @return $this
     */
    public function setBody($body)
    {
        $this->params['body'] = $body;
        return $this;
    }

    /**
     * 此为买家登陆到完成支付的有效时间
     * 示例：5m 10m 15m 30m 1h 2h 3h 5h 10h 12h 1d.
     * 默认12小时，最大15天。
     * @param $timeout_rule
     * @return $this
     */
    public function setTimeoutRule($timeout_rule)
    {
        $this->params['timeout_rule'] = $timeout_rule;
        return $this;
    }

    /**
     * 此为买家登陆到完成支付的有效时间
     * 示例：5m 10m 15m 30m 1h 2h 3h 5h 10h 12h 1d.
     * 默认12小时，最大15天。
     * @return string|null
     */
    public function getTimeoutRule()
    {
        return isset($this->params['timeout_rule']) ? $this->params['timeout_rule'] : null;
    }

    /**
     * 显示供货商名字
     * @param string $supplier
     * @return $this
     */
    public function setSupplier($supplier)
    {
        $this->params['supplier'] = $supplier;
        return $this;
    }

    /**
     * 显示供货商名字
     * @param string $supplier
     * @return null
     */
    public function getSupplier($supplier)
    {
        return isset($this->params['supplier']) ? $this->params['supplier'] : null;
    }

    /**
     * 网站支付: NEW_OVERSEAS_SELLER
     * @param string $product_code
     * @return $this
     */
    public function setProductCode($product_code)
    {
        $this->params['product_code'] = $product_code;
        return $this;
    }

    /**
     * 网站支付: NEW_OVERSEAS_SELLER
     * @return string
     */
    public function getProductCode()
    {
        return isset($this->params['product_code']) ? $this->params['product_code'] : null;
    }

    /**
     * 分账信息
     * @link https://global.alipay.com/service/website_split_cn/28
     * @param array $split_fund_info
     * @return $this
     */
    public function setSplitFundInfo($split_fund_info)
    {
        $this->params['split_fund_info'] = json_encode($split_fund_info);
        return $this;
    }



    /**
     * 分账信息
     * @return null
     */
    public function getSplitFundInfo()
    {
        return isset($this->params['split_fund_info']) ? $this->params['split_fund_info'] : null;
    }

    public  function getServiceName()
    {
        return 'create_forex_trade';
    }
}